package com.example.core.testDemo.controller;

import com.example.core.shiroLogin.UserController;
import com.example.core.testDemo.DTO.MemberDTO;
import com.example.core.testDemo.service.MemberInterface;
import com.example.core.testDemo.utils.Result;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.jws.WebParam;
import javax.validation.Valid;
import java.util.List;

/**
 * @描述 Springboot测试
 * 使用了分页框架
 * @类名 TestDemo
 * @日期 2019/9/17
 * @时间 14:46
 * @作者 zhangzhaoyang
 */
@CrossOrigin
@Controller
@RequestMapping("/test")
public class TestDemo {
    private static Logger logger = LoggerFactory.getLogger(TestDemo.class);

    @Autowired
    protected MemberInterface MemberInterface;

    /*
    * 下面使用了分页框架：PageInfo方法总的参数介绍
    * 当前页
    * private int pageNum;
     *每页的数量
    * private int pageSize;
    *  当前页的数量
    * private int size;
   *  //由于startRow和endRow不常用，这里说个具体的用法
   *  //可以在页面中"显示startRow到endRow 共size条数据"
    * //当前页面第一个元素在数据库中的行号
    * private int startRow;
    * //当前页面最后一个元素在数据库中的行号
    * private int endRow;
    * //总记录数
    * private long total;
    * //总页数
    * private int pages;
    * //结果集(每页显示的数据)
    * private List<T> list;
    //第一页
    private int firstPage;
    * //前一页
   *  private int prePage;
    //是否为第一页
    * private boolean isFirstPage = false;
   *  //是否为最后一页
   *  private boolean isLastPage = false;
    * //是否有前一页
    * private boolean hasPreviousPage = false;
    * //是否有下一页
   *  private boolean hasNextPage = false;
   *  //导航页码数
   *  private int navigatePages;
    * //所有导航页号
    * private int[] navigatepageNums;
    * */

    @RequestMapping(value = "/demo")
    @ResponseBody
    public Result tast1() {
//        页面传来的参数，为了后台开发方便，暂时在后台写死
        Integer page = 1;
        Integer limit = 5;
        /*使用分页插件进行分页*/
        logger.info("{当前      页}" + page + "{,条数}" + limit);
        Result result = new Result();

        /*对页面传递的参数进行处理*/
        Integer pageNum = Integer.valueOf(String.valueOf(page == null ? "1" : page));
        Integer pageSize = Integer.valueOf(String.valueOf(page == null ? "5" : limit));
        /*如果页面没有传递当前页和每页的条数，就设置默认值*/
        pageNum = pageNum == null ? 1 : pageNum;
        pageSize = pageSize == null ? 5 : pageSize;
        PageHelper.startPage(pageNum, pageSize);

        List<MemberDTO> resultMember = MemberInterface.queryMemberTable();
        PageInfo<MemberDTO> resultPage = new PageInfo<>(resultMember);
        logger.info("{输出分页数据：}" + resultPage);

        logger.error("error将日志写入数据库");
        logger.debug("debug将日志写入数据库");
        logger.info("info将日志写入数据库");
        result.setCode(11111111);
        result.setData(resultPage);
        return result;
    }

  /**
   * 使用SpeingBoot的注解的形式对传递的参数进行校验
   * */
    @RequestMapping("/demoAdd")
    public String demoAdd(@Valid MemberDTO memberDTO, BindingResult result, Model model){
        //使用SpringBoot中的注解校验
        logger.info("{使用SpringBoot中的注解校验：}" + memberDTO.getName()+"=="+memberDTO.getPassword());
        model.addAttribute("memberDTO",memberDTO);
        logger.info("{使用SpringBoot中的注解校验输出结果：}" + memberDTO.getName()+"=="+memberDTO.getPassword());

        //有错误信息.
        model.addAttribute("demo",memberDTO);
        if(result.hasErrors()){
            List<ObjectError>  list = result.getAllErrors();
            for(ObjectError  error:list){
                System.out.println(error.getCode()+"---"+error.getArguments()+"---"+error.getDefaultMessage());
            }
            return "demo";
        }
        return "/demo";

    }

}
